﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace SistemaCenterQuimPost.UI.PostCajero
{
    public partial class frmBuscarClientes : SistemaCenterQuimPost.UI.PostCajero.frmGestionClientes
    {
        //----------------ATRIBUTOS-----------------------
        private Form formularioLlamador;

        //---------------CONSTRUCTORES--------------------
        public frmBuscarClientes()
        {
            InitializeComponent();

            removerControles();  //se remueve los controles heredados que no necesitamos en esta interface, por diseño no se puede

            posicionarListBox(); //se posiciona los listBox, porque por herencia en el diseño no se puede.

            formularioLlamador = null; //como es un constructor que no recibe el formulario desde donde lo llamó. Queda en null.
        
        }

        public frmBuscarClientes(Form unFrmLlamador)  //constructor que recibe el formulario desde donde se necesita el cliente.
        {
            InitializeComponent();

            removerControles();  //se remueve los controles heredados que no necesitamos en esta interface, por diseño no se puede

            posicionarListBox(); //se posiciona los listBox, porque por herencia en el diseño no se puede.

            this.formularioLlamador = unFrmLlamador; //se establece la referencia desde donde fué llamado el buscarClientes.

        }

        //------------------ESTADOS-----------------------


        //--------------METODOS VARIOS--------------------
        private void removerControles()   //Eliminar los controles que heredé pero que no los voy a usar.
        {
            this.Controls.Remove(this.groupBox2);
            this.Controls.Remove(this.groupBox3);
            this.Controls.Remove(this.lblErrorDni);
            this.Controls.Remove(this.lblErrorApellido);
            this.Controls.Remove(this.lblNombre);
            this.Controls.Remove(this.txtNombre);
            this.Controls.Remove(this.lblErrorNombre);
            this.Controls.Remove(this.lblCuit);
            this.Controls.Remove(this.txtCuit);
            this.Controls.Remove(this.lblProvincia);
            this.Controls.Remove(this.txtProvincia);
            this.Controls.Remove(this.lblLocalidad);
            this.Controls.Remove(this.txtLocalidad);
            this.Controls.Remove(this.lblDireccion);
            this.Controls.Remove(this.txtDireccion);
            this.Controls.Remove(this.lblErrorDireccion);
            this.Controls.Remove(this.lblTel);
            this.Controls.Remove(this.txtTel);
            this.Controls.Remove(this.lblCel);
            this.Controls.Remove(this.txtCel);
            this.Controls.Remove(this.lblEmail);
            this.Controls.Remove(this.txtEmail);
            this.Controls.Remove(this.lblDescuento);
            this.Controls.Remove(this.txtDescuento);
            this.Controls.Remove(this.btnAgregar);
            this.Controls.Remove(this.btnEditar);
            this.Controls.Remove(this.lblAgregar);
            this.Controls.Remove(this.lblEditar);
            this.Controls.Remove(this.btnProcesar);
        }

        private void posicionarListBox()  //usado para colocar a los lstBox en su lugar, ya que por herencia en t.Diseño no se puede.
        {
            lstClientesApellidoNombre.Location = new Point(256, 126);
            
        }

        protected override void resguardarClienteActual() //Guarda los valores de los textBox en array resgClienteActual, luego de una busqueda exitosa.
        {
            
        }

        protected override void deshacerCambios()  //usado cuando en estado editar o agregar, se arrepiente (no se apreta en procesar) y se vuelve a estado esperandoOperacion.
        {
            
        }


        protected override void cargarClientePorDni(string unDni) //busca cliente con dni (una coincidencia) encontrado en el oHiloFiltrarDni y lo carga en los textBox.
        {
            try
            {
                //(ALE)HACER EL FILL O COMO LO LLAMES ACA ABAJO
                //clientesTa.FillByClientes(centerQuimDs,unDni);
                clientesTa.FillByDni(clientesDs.Clientes, unDni);

                //ARREGLAR ESTO. Se rellena los textBox con la consulta encontrada.
                lblDniValor.Text = clientesDs.Clientes[0].dni;

                lblApellidoNombreValor.Text = clientesDs.Clientes[0].apellidoyNombre;
                lblDireccionValor.Text = clientesDs.Clientes[0].direccion;
                lblDescuentoValor.Text = clientesDs.Clientes[0].descuento.ToString();
               
                
                //...
                //..FALTAN LOS OTROS. ACORDATE QUE ESTE ES EL DE CAJERO, TIENE POCOS CONTROLES.

            }
            catch (IndexOutOfRangeException)
            {

            }
            catch (Exception ex)
            {
                //Por cualquier otra excepcion se informa el error, en este caso es un error grave.
                MessageBox.Show("La conexión a la base de datos no fué exitosa.\n\n Comuniquese con su desarrollador para solucionar el problema.\n\n" + ex.Message, "ERROR GRAVE - ACCESO A BASE DE DATO", MessageBoxButtons.OK, MessageBoxIcon.Error);

                //Si llega a ocurrir algún error grave se cierra el formulario 
                this.Close();
            }
        }

        protected override void cargarClientesPorApellidoNombre(string unApellidoNombre)  //busca el cliente por nombreApellido en la base de datos y lo carga en los textbox.
        {
            //(ALE) HACER EL FILL O COMO LO LLAMES ACA ABAJO
            clientesTa.FillByApellidoNombre(clientesDs.Clientes, unApellidoNombre);

            //ARREGLAR ESTO. Se rellena los textBox con la consulta encontrada.
            lblDniValor.Text = clientesDs.Clientes[0].dni;

            lblApellidoNombreValor.Text = clientesDs.Clientes[0].apellidoyNombre;
            lblDireccionValor.Text = clientesDs.Clientes[0].direccion;
            lblDescuentoValor.Text = clientesDs.Clientes[0].descuento.ToString();

            //...
            //..FALTAN LOS OTROS. ACORDATE QUE ESTE ES EL DE CAJERO, TIENE POCOS CONTROLES.


        }

        private void btnAceptar_Click(object sender, EventArgs e) //metodo capturador del evento click sobre el boton aceptar
        {

            Type tipoObj;  //se declara una variable que verificará, que tipo de formulario está llamando.
            tipoObj = this.formularioLlamador.GetType();

            switch (tipoObj.Name)
            {
                case "frmRegistrarVentas":  //si el llamador es frmRegistrarVentas, se convierte explicitamente la referencia y se le pasa los valores solicitados, luego se cierra.
                    
                    ((frmRegistrarVentas)this.formularioLlamador).cargarCliente(lblDniValor.Text,lblApellidoNombreValor.Text, lblDescuentoValor.Text);
                    
                    this.Close();
                    
                    break;

                case "frmPresupuestos":  //si el llamador es frmPresupuestos, se convierte explicitamente la referencia y se le pasa los valores solicitados, luego se cierra.

                    ((frmPresupuestos)this.formularioLlamador).cargarCliente(lblDniValor.Text, lblApellidoNombreValor.Text, lblDescuentoValor.Text);

                    this.Close();

                    break;
                     
                default:
                    break;
            }

        }

        private void btnCancelar_Click(object sender, EventArgs e) //metodo capturador del evento click sobre el boton cancelar.
        {
            this.Close(); //si presiona cancelar solo cierra
        }



    }
}
